[기초] Annotation

NOTE

Java 어노테이션 — 코드에 특별한 의미/기능을 부여하는 메타데이터.

📌 개념

  • Java에서 의미: 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술
    • 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있음

NOTE

meta data : 데이터를 위한 데이터 (데이터 설명을 위한 데이터)

@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface [어노테이션명]{
    public 타입 elementName() [default 값]
    ...
}

@Target에는 어떠한 값(ex : 클래스, 필드, 메서드 …)에 어노테이션을 적용할 것인지 나타낼 수 있는데 넣을 수 있는 값은 다음 표와 같다.

ElementType 열거 상수적용대상
TYPE클래스, 인터페이스, 열거 타입
ANNOTATION_TYPE어노테이션
FIELD필드
CONSTRUCTOR생성자
METHOD메소드
LOCAL_VARIABLE로컬 변수
PACKAGE패키지

@Retention에는 어노테이션 값들을 언제까지 유지할 것인지 값을 입력하는데 각 값이 가지는 의미는 다음 표와 같다. 보통 어노테이션은 Runtime시에 많이 사용하므로 대부분의 어노테이션의 Retention 값은 RUNTIME으로 되어있다.

RetentionPolicy 열거 상수설명
SOURCE소스상에서만 어노테이션 정보를 유지한다. 소스 코드를 분석할 때만 의미가 있으며, 바이트 코드 파일에는 정보가 남지 않는다.
CLASS바이트 코드 파일까지 어노테이션 정보를 유지한다. 하지만 리플렉션을 이용해서 어노테이션 정보를 얻을 수는 없다.
RUNTIME바이트 코드 파일까지 어노테이션 정보를 유지하면서 리플렉션을 이용해서 런타임에 어노테이션 정보를 얻을 수 있다.